'FastTest.inc - definitions/declarations for Fast Test routines
'
'  Copyright (c) 1991-1992, Microsoft Corporation. All rights reserved.
'
'Purpose:
' This file declares the functions, constants and variables
' used by the Fast Test routines.
'
'NOTES:
' A common code sequence is used throughout to catch unexpected errors
' using the ON ERROR command.  The sequence is explained in this note
' but not each time that it is used.
'
'    gErrorType = ET_NEXT       ' Global variable to indicate how to handle
'                               ' an unexpected error:
'                               '   ET_NEXT : save that error happened
'                               '             and continue on next statement
'                               '   ET_NOTHING : let driver catch unexpected
'                               '             errors with message
'                               '   ET_LOG  : error happened in log routine
'
'    ' some code that could cause runtime errors
'    fh1% = FREEFILE            ' out of handles?
'    OPEN stFileSpec1$ FOR INPUT AS #fh1%  ' file doesn't exist?
'    fh2% = FREEFILE            ' out of handles?
'    OPEN stFileSpec2$ FOR INPUT AS #fh2%  ' file doesn't exist?
'
'    IF gfError THEN            ' since ET_NEXT was used above, we would
'                               ' execute this block if an error had
'                               ' occurred.
'        XLogFailure "Could not open files for XFileCmp"   ' log a failure
'                               ' specific to this section of code
'        ' if XSetTerminate is called to have scripts continue in event
'        ' of errors, then the script will continue executing here
'        gErrorType = ET_NOTHING  ' reset so other unexpected errors are
'                               ' caught
'        gfError = FALSE        ' reset because we logged this already
'        EXIT SUB               ' can't continue with this function,
'                               ' something went wrong
'    END IF



'$DEFINE TESTCTRL
'$DEFINE TESTEVNT
'$INCLUDE 'MSTEST.inc'
'$INCLUDE 'WNAPIDEC.INC'

' XLog constants to determine where to log information to
CONST LOG_DISK   = 2      'log to disk
CONST LOG_SCREEN = 4      'log to screen (viewport in testdrvr)
CONST LOG_COM1   = 8      'log to COM1 port
CONST LOG_COM2   = 16     'log to COM2 port
CONST LOG_MSGBOX = 32     'log the string in a msgbox (Pause in testdrvr)

' Mouse button constants that map to QueMouse function names, X functions
' can use either ones
CONST LBUTTON% = VK_LBUTTON
CONST MBUTTON% = VK_MBUTTON
CONST RBUTTON% = VK_RBUTTON

'Global to be used to describe Log Options by ORing above Const's
GLOBAL gfLogOptions%
'Global to be used to save above flag when logging is temporarily turned off.
GLOBAL gfTmpLogOptions%

gfLogOptions = LOG_SCREEN 'default to showing in viewport
gfTmpLogOptions = LOG_SCREEN 'default to showing in viewport

GLOBAL gsCurrentDir$
gsCurrentDir$ = curdir$      ' get current directory that started execution

' Global variable to hold log file name
GLOBAL gsLogFileName$
gsLogFileName$ = gsCurrentDir$ + "\FASTTEST.LOG"

' Global variable to hold string to use as the keystrokes necessary
'   to close the app in the case of errors
GLOBAL gsCleanup$
gsCleanup$ = "{esc 5}%( )c"  ' five escapes, alt-space C (for close)

' Global variable to hold class name of app
GLOBAL gsAppClassname$
gsAppClassname$ = ""

' Global variable to hold state of whether to terminate on XLogFailure
GLOBAL gfTerminate%
gfTerminate% = TRUE    ' default to terminate at first failure

' Global variable that indicates if failure occured
GLOBAL gfFailure%
gfFailure% = FALSE

'Global variable that indicates an ON ERROR occurred
GLOBAL gfError%
gfError% = FALSE

'Global variable that is the string value for the dialog window class
GLOBAL gsDialogClass$
gsDialogClass$ = "#32770"



' Error Type constants (don't use 0)
CONST ET_NOTHING = 1      ' no handling, log unexpected runtime error
CONST ET_NEXT    = 2      ' flag error, continue next statement
CONST ET_LOG     = 3      ' error happened in log routines, inform user elsewise

'Global variable that shows what type of error to handle
GLOBAL gErrorType%
gErrorType% = ET_NOTHING


'Prototypes from FTestLog.mst
DECLARE SUB XSetLogFilename(sFilename$)
DECLARE SUB XSetTerminate(fTerminate%)
DECLARE SUB XLog (stLog$)
DECLARE SUB XLogBanner(lpszInput$)
DECLARE SUB XLogWarning(lpszInput$)
DECLARE SUB XLogFailure(stFailure$)
DECLARE SUB XFailureCheck
DECLARE SUB XSetLogOptions (wLogOptions%)
DECLARE SUB XLogOff ()
DECLARE SUB XLogOn ()
DECLARE SUB XDialogBoxExists(s$)
DECLARE SUB XDialogBoxNotExists(s$)
DECLARE SUB XWaitDialogBox(s$, WaitTime%)
DECLARE SUB XButtonExists(stButton$)
DECLARE SUB XButtonNotExists(stButton$)
DECLARE SUB XButtonEnabled(stButton$)
DECLARE SUB XButtonNotEnabled(stButton$)
DECLARE SUB XClickButton(stButtonName$)
DECLARE SUB XListBoxExists(stListBox$)
DECLARE SUB XListBoxNotExists(stListBox$)
DECLARE SUB XFocusListBox(stListBox$)
DECLARE SUB XListBoxItemExists (stListBox$, stListBoxItem$)
DECLARE SUB XListBoxItemNotExists (stListBox$, stListBoxItem$)
DECLARE SUB XClickListBoxItem (stListBox$, stListBoxItem$)
DECLARE SUB XDblClickListBoxItem (stListBox$, stListBoxItem$)
DECLARE SUB XComboBoxExists(stComboBox$)
DECLARE SUB XComboBoxNotExists(stComboBox$)
DECLARE SUB XFocusComboBox(stComboBox$)
DECLARE SUB XComboBoxItemExists (stComboBox$, stComboBoxItem$)
DECLARE SUB XComboBoxItemNotExists (stComboBox$, stComboBoxItem$)
DECLARE SUB XClickComboBoxItem (stComboBox$, stComboBoxItem$)
DECLARE SUB XDblClickComboBoxItem (stComboBox$, stComboBoxItem$)
DECLARE SUB XCheckBoxExists(stCheckBox$)
DECLARE SUB XCheckBoxNotExists(stCheckBox$)
DECLARE SUB XCheckBoxChecked(stCheckBox$)
DECLARE SUB XCheckBoxNotChecked(stCheckBox$)
DECLARE SUB XCheckBoxEnabled(stCheckBox$)
DECLARE SUB XCheckBoxNotEnabled(stCheckBox$)
DECLARE SUB XClickCheckBox(stCheckBox$)
DECLARE SUB XEditTextExists(stEditText$)
DECLARE SUB XEditTextNotExists(stEditTextNot$)
DECLARE SUB XSetEditText (stEditCaption$, stEditText$)
DECLARE SUB XOptionButtonExists(stOptionButton$)
DECLARE SUB XOptionButtonNotExists(stOptionButton$)
DECLARE SUB XOptionButtonEnabled(stOptionButton$)
DECLARE SUB XOptionButtonNotEnabled(stOptionButton$)
DECLARE SUB XOptionButtonChecked(stOptionButton$)
DECLARE SUB XOptionButtonNotChecked(stOptionButton$)
DECLARE SUB XClickOptionButton(stOptionButton$)
DECLARE FUNCTION BDialogBoxExists%(s$)
DECLARE FUNCTION BButtonExists%(stButtonName$)
DECLARE FUNCTION BButtonEnabled%(stButtonName$)
DECLARE FUNCTION BListBoxExists%(stListBox$)
DECLARE FUNCTION IGetListBoxItemCount%(stListBox$)
DECLARE FUNCTION BListBoxItemExists%(stListBox$, stListBoxItem$)
DECLARE FUNCTION SGetListBoxItemText$(stListBox$)
DECLARE FUNCTION BComboBoxExists%(stComboBox$)
DECLARE FUNCTION IGetComboBoxItemCount%(stComboBox$)
DECLARE FUNCTION BComboBoxItemExists%(stComboBox$, stComboBoxItem$)
DECLARE FUNCTION SGetComboBoxItemText$(stComboBox$)
DECLARE FUNCTION BCheckBoxExists%(stCheckBox$)
DECLARE FUNCTION BCheckBoxChecked%(stCheckBox$)
DECLARE FUNCTION BCheckBoxEnabled%(stCheckBox$)
DECLARE FUNCTION BEditTextExists%(stEditText$)
DECLARE FUNCTION SGetEditText$(stEditCaption$)
DECLARE FUNCTION BOptionButtonExists%(stOptionButton$)
DECLARE FUNCTION BOptionButtonEnabled%(stOptionButton$)
DECLARE FUNCTION BOptionButtonChecked%(stOptionButton$)

'Prototypes from FTestKey.mst
DECLARE SUB XKey (s$)
DECLARE SUB XAlt (s$)
DECLARE SUB XCtrl (s$)
DECLARE SUB XShift (s$)
DECLARE SUB XCtrlAlt (s$)
DECLARE SUB XAltShift (s$)
DECLARE SUB XCtrlShift (s$)
DECLARE SUB XCtrlAltShift (s$)
DECLARE SUB XText(s$)
DECLARE SUB XEnter(s$)
DECLARE SUB XSelectMenuItem(stMenu$,stMenuItem$,stHMenuItem$)
DECLARE SUB XMenuItemExists(stMenu$,stMenuItem$, stHMenuItem$)
DECLARE SUB XMenuItemNotExists(stMenu$,stMenuItem$, stHMenuItem$)
DECLARE SUB XMenuItemGrayed(stMenu$,stMenuItem$, stHMenuItem$)
DECLARE SUB XMenuItemNotGrayed(stMenu$,stMenuItem$, stHMenuItem$)
DECLARE SUB XMenuItemChecked(stMenu$,stMenuItem$, stHMenuItem$)
DECLARE SUB XMenuItemNotChecked(stMenu$,stMenuItem$, stHMenuItem$)
DECLARE SUB XMenuItemEnabled(stMenu$,stMenuItem$, stHMenuItem$)
DECLARE SUB XMenuItemNotEnabled(stMenu$,stMenuItem$, stHMenuItem$)
DECLARE SUB XCaptionExists(stCaption$)
DECLARE SUB XCaptionNotExists(stCaption$)
DECLARE SUB XZoomWindow
DECLARE SUB XMaxWindow
DECLARE SUB XWindowMaximized
DECLARE SUB XWindowNotMaximized
DECLARE SUB XMinWindow
DECLARE SUB XWindowMinimized
DECLARE SUB XWindowNotMinimized
DECLARE SUB XRestoreWindow
DECLARE SUB XSizeActiveWindow (iXPixels%, iYPixels%, fAbsOrRel%)
DECLARE SUB XMoveActiveWindow (iXPixels%, iYPixels%, fAbsOrRel%)
DECLARE FUNCTION SKeyString$(s$)
DECLARE FUNCTION SHideKeys$(s$)
DECLARE FUNCTION BMenuItemExists%(stMenu$,stMenuItem$,stHMenuItem$)
DECLARE FUNCTION IGetMenuCount%(stMenu$, stMenuItem$)
DECLARE FUNCTION SGetMenuItemText$(stMenu$,stMenuItem$, iIndex%)
DECLARE FUNCTION BMenuItemGrayed%(stMenu$, stMenuItem$, stHMenuItem$)
DECLARE FUNCTION BMenuItemChecked%(stMenu$, stMenuItem$, stHMenuItem$)
DECLARE FUNCTION BMenuItemEnabled%(stMenu$,stMenuItem$, stHMenuItem$)
DECLARE FUNCTION SGetCaption$()
DECLARE FUNCTION BWindowMaximized%
DECLARE FUNCTION BWindowMinimized%

'Prototypes from FTestUtl.mst
DECLARE SUB XFileExists(stFileSpec$)
DECLARE SUB XFileNotExists(stFileSpec$)
DECLARE SUB XFileCmp(stFileSpec1$,stFileSpec2$)
DECLARE SUB XFileNotCmp(stFileSpec1$,stFileSpec2$)
DECLARE SUB XDeleteFile(stFileSpec$)
DECLARE SUB XDeleteFileIfExists(stFileSpec$)
DECLARE SUB XCreateFile(stFileSpec$,s$)
DECLARE SUB XAppendFile(stFileSpec$,s$)
DECLARE SUB XWaitMessageFile(s$,Message$, WaitTime%)
DECLARE SUB XCWDCmp(s$)
DECLARE SUB XCWDNotCmp(s$)
DECLARE SUB XDriveCmp(s$)
DECLARE SUB XDriveNotCmp(s$)
DECLARE SUB XChangeCWD(s$)
DECLARE SUB XCreateDir(s$)
DECLARE SUB XChangeDrive(s$)
DECLARE SUB XStartApp(stAppName$, stClassname$)
DECLARE SUB XSetCleanup (sCleanup$)
DECLARE SUB XDoCleanup
DECLARE SUB XMoveMouse (x%, y%)
DECLARE SUB XClickMouse(button%, x%, y%)
DECLARE SUB XDblClickMouse(button%, x%, y%)
DECLARE SUB XDragMouse (button%, Begx%, Begy%, Endx%, Endy%)
DECLARE SUB XClipBoardCmp (s$)
DECLARE SUB XClipBoardNotCmp (s$)
DECLARE FUNCTION BFileExists%(stFileSpec$)
DECLARE FUNCTION BFileCmp%(stFileSpec1$,stFileSpec2$)
DECLARE FUNCTION BCWDCmp%(s$)
DECLARE FUNCTION BDriveCmp%(s$)
DECLARE FUNCTION HStartApp%(stAppName$)
DECLARE FUNCTION BClipBoardCmp (s$)




'$INCLUDE 'FTestLog.mst'
'$INCLUDE 'FTestKey.mst'
'$INCLUDE 'FTestUtl.mst'


' These routines have to be after the above includes so that
' the functions used are declared

ON END XDoCleanup

' Set a UAE trap and log failure if one occurs

TRAP UAETrap FROM "TESTDRVR.EXE"
    XSetTerminate TRUE
    XLogFailure "Application UAEed"
END TRAP

' in the FastTest code, gErrorType will be set to one of the following
' CASE items to be handled and set back to ET_NOTHING when the particular
' place where an error could occur is past.
ON ERROR GOTO XErrorHandler

GOTO UsersCode  ' branch around code used by On Error

XErrorHandler:  ' execute here on error conditions

    SELECT CASE gErrorType
        CASE 0
            XSetTerminate TRUE
            XLogFailure "Internal FastTest Error"    ' catch undeclared ET vars
        CASE ET_NOTHING
            XSetTerminate TRUE
            XLogFailure "Unexpected RunTime error;" + ERF + ":" + STR$(ERR) + " " + ERROR$(ERR)
        CASE ET_NEXT
            ' Code that uses this will check the global error variable
            ' and log an appropriate error if one occurred
            gfError = TRUE
            RESUME NEXT
        CASE ET_LOG ' something happened during logging, let user know
            Print "****** A Log error occurred ******"
            Pause "****** A Log error occurred ******"


            END

    END SELECT
    XSetTerminate TRUE
    XLogFailure "Internal FastTest error"


UsersCode:
